/**
 * @file drv_can.h
 * @brief CAN总线驱动头文件
 * @date 2025-11-03
 */

#ifndef __DRV_CAN_H__
#define __DRV_CAN_H__

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stdbool.h>

/* Exported types ------------------------------------------------------------*/

/**
 * @brief CAN消息结构
 */
typedef struct
{
    uint32_t id;        /* 消息ID */
    uint8_t data[8];    /* 数据 */
    uint8_t len;        /* 数据长度 */
} can_message_t;

/* Exported functions prototypes ---------------------------------------------*/

/**
 * @brief 初始化CAN
 * @retval 0 成功，-1 失败
 */
int drv_can_init(void);

/**
 * @brief 发送CAN消息
 * @param id 消息ID
 * @param data 数据指针
 * @param len 数据长度(1-8)
 * @retval 0 成功，-1 失败
 */
int drv_can_send(uint32_t id, uint8_t *data, uint8_t len);

/**
 * @brief 检查是否有消息
 * @retval true 有消息，false 无消息
 */
bool drv_can_available(void);

/**
 * @brief 读取消息
 * @param msg 输出参数，接收到的消息
 * @retval 0 成功，-1 失败
 */
int drv_can_read(can_message_t *msg);

#ifdef __cplusplus
}
#endif

#endif /* __DRV_CAN_H__ */

/******************************** 文件结束 *********************************/
